<?php

/**
 * This is the model class for table "mbr_membro".
 *
 * The followings are the available columns in table 'mbr_membro':
 * @property integer $membro_id
 * @property string $nome
 * @property string $sobrenome
 * @property string $data_nascimento
 * @property string $data_conversao
 * @property string $data_batismo
 * @property string $rg
 * @property string $rg_orgao
 * @property string $cpf
 * @property string $email
 * @property string $sexo
 * @property string $grau_instrucao
 * @property string $curso
 * @property string $nacionalidade
 * @property string $estado_civil
 * @property integer $profissao_id
 * @property string $logradouro
 * @property string $numero
 * @property string $complemento
 * @property string $bairro
 * @property integer $cidade_id
 * @property integer $estado_id
 * @property string $cep
 * @property integer $pais_id
 * @property string $telefone_residencial
 * @property string $telefone_trabalho
 * @property string $telefone_celular
 * @property integer $ativo
 * @property integer $motivo_inatividade_id
 *
 * The followings are the available model relations:
 * @property MotivoInatividade $motivoInatividade
 * @property Cidade $cidade
 * @property Estado $estado
 * @property Pais $pais
 * @property Profissao $profissao
 */
class Membro extends CActiveRecord
{
	
	// CONSTANTES
	
	/* Grau de Instrução */
	const GRAU_INSTRUCAO_ANALFABETO = 'an';
	const GRAU_INSTRUCAO_FUNDAMENTAL_INCOMPLETO = 'fi';
	const GRAU_INSTRUCAO_FUNDAMENTAL_COMPLETO = 'fc';
	const GRAU_INSTRUCAO_MEDIO_INCOMPLETO = 'mi';
	const GRAU_INSTRUCAO_MEDIO_COMPLETO = 'mc';
	const GRAU_INSTRUCAO_SUPERIO_INCOMPLETO = 'si';
	const GRAU_INSTRUCAO_SUPERIOR_COMPLETO = 'sc';
	const GRAU_INSTRUCAO_POS_GRADUACAO = 'pg';
	
	/* Sexo */
	const SEXO_MASCULINO = 'm';
	const SEXO_FEMININO = 'f';
	
	/* Estado Civil */
	const ESTADO_CIVIL_SOLTEIRO = 'solteiro';
	const ESTADO_CIVIL_CASADO = 'casado';
	const ESTADO_CIVIL_SEPARADO = 'separado';
	const ESTADO_CIVIL_DIVORCIADO = 'divorciado';
	const ESTADO_CIVIL_VIUVO = 'viuvo';
	
	/* Situação do membro na igreja -  coluna 'ativo' da base */
	const MEMBRO_ATIVO = 1;
	const MEMBRO_INATIVO = 0; 
	

	/**
	 * Retorna um array com as opções de grau de instrução
	 * 
	 * @return multitype:string
	 */
	public static function getOpcoesGrauInstrucao() {
		return array(
			self::GRAU_INSTRUCAO_ANALFABETO => 'analfabeto',
			self::GRAU_INSTRUCAO_FUNDAMENTAL_INCOMPLETO => 'ensino fundamental incompleto',
			self::GRAU_INSTRUCAO_FUNDAMENTAL_COMPLETO => 'ensino fundamental completo',
			self::GRAU_INSTRUCAO_MEDIO_INCOMPLETO => 'ensino médio incompleto',
			self::GRAU_INSTRUCAO_MEDIO_COMPLETO => 'ensino médio completo',
			self::GRAU_INSTRUCAO_SUPERIO_INCOMPLETO => 'ensino superior incompleto',
			self::GRAU_INSTRUCAO_SUPERIOR_COMPLETO => 'ensino superior completo',
			self::GRAU_INSTRUCAO_POS_GRADUACAO => 'pós graduação',
		);
	}
	

	/**
	 * Retorna o texto relativo ao grau de instrução do membro
	 * 
	 * @return string
	 */
	public function getTextoGrauInstrucao()
	{
		$opcoesGrauInstrucao = Membro::getOpcoesGrauInstrucao();
		return isset($opcoesGrauInstrucao[$this->grau_instrucao]) ? 
			$opcoesGrauInstrucao[$this->grau_instrucao] : "desconhecido ({$this->grau_instrucao})";
	}
	
	
	/**
	 * Retorna um array com as opções sexo
	 *
	 * @return multitype:string
	 */
	public static function getOpcoesSexo() {
		return array(
			self::SEXO_MASCULINO => 'masculino',
			self::SEXO_FEMININO => 'feminino',
		);
	}
	
	
	/**
	 * Retorna o texto relativo ao sexo do membro
	 *
	 * @return string
	 */
	public function getTextoSexo()
	{
		return $this->sexo == 'm' ? 'masculino' : 'feminino';
	}
	
	
	/**
	 * Retorna um array com as opções de estado civil
	 *
	 * @return multitype:string
	 */
	public static function getOpcoesEstadoCivil() {
		return array(
			self::ESTADO_CIVIL_SOLTEIRO => 'solteiro',
			self::ESTADO_CIVIL_CASADO => 'casado',
			self::ESTADO_CIVIL_SEPARADO => 'separado',
			self::ESTADO_CIVIL_DIVORCIADO => 'divorciado',
			self::ESTADO_CIVIL_VIUVO => 'viúvo',
		);
	}
	
	
	/**
	 * Retorna o texto relativo ao estado civil do membro
	 *
	 * @return string
	 */
	public function getTextoEstadoCivil()
	{
		$opcoesEstadoCivil= Membro::getOpcoesEstadoCivil();
		return isset($opcoesEstadoCivil[$this->estado_civil]) ?
			$opcoesEstadoCivil[$this->estado_civil] : "desconhecido ({$this->estado_civil})";
	}
	
	
	/**
	 * Retorna um array com as opções de ativo/inativo
	 * 
	 * @return multitype:string
	 */
	public static function getOpcoesAtivo() {
		return array(
				self::MEMBRO_ATIVO => 'ativo',
				self::MEMBRO_INATIVO => 'inativo',
		);
	}
	
	
	/**
	 * Retorna o texto relativo à atividade do membro
	 *
	 * @return string
	 */
	public function getTextoAtivo()
	{
		return $this->ativo == 1 ? 'ativo' : 'inativo';
	}
	
	
	/**
	 * Retorna um array com as opções de motivo de inatividade do membro
	 * 
	 * @return multitype:string
	 */
	public static function getOpcoesMotivoInatividade() {
		$conexao = Yii::app()->db;
		$sql = 'SELECT * FROM mbr_motivo_inatividade';
		$comando = $conexao->createCommand($sql);
		$dataReader = $comando->query();
		$arrayOpcoes = array();
		foreach ($dataReader as $row){
			$arrayOpcoes[ intval($row['motivo_inatividade_id']) ] = $row['descricao'];
		}
		return $arrayOpcoes;
	}
	
	
	/**
	 * Retorna o texto relativo ao motivo da inatividade do membro
	 *
	 * @return string
	 */
	public function getTextoMotivoInatividade()
	{
		$opcoesMotivoInatividade = Membro::getOpcoesMotivoInatividade();
		return isset($opcoesMotivoInatividade[$this->motivo_inatividade_id]) ?
			$opcoesMotivoInatividade[$this->motivo_inatividade_id] : "desconhecido ({$this->motivo_inatividade_id})";
	}
	
	
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Membro the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'mbr_membro';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('nome', 'required'),
			array('profissao_id, cidade_id, estado_id, pais_id, ativo, motivo_inatividade_id', 'numerical', 'integerOnly'=>true),
			array('nome, sobrenome, email, curso, nacionalidade, logradouro, complemento, bairro', 'length', 'max'=>200),
			array('rg, rg_orgao, grau_instrucao, numero, telefone_residencial, telefone_trabalho, telefone_celular', 'length', 'max'=>20),
			array('cpf', 'length', 'max'=>11),
			array('sexo', 'length', 'max'=>9),
			array('estado_civil, cep', 'length', 'max'=>10),
			array('data_nascimento, data_conversao, data_batismo', 'date', 'format'=>'yyyy-MM-dd'),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('membro_id, nome, sobrenome, data_nascimento, data_conversao, data_batismo, rg, rg_orgao, cpf, email, sexo, grau_instrucao, curso, nacionalidade, estado_civil, profissao_id, logradouro, numero, complemento, bairro, cidade_id, estado_id, cep, pais_id, telefone_residencial, telefone_trabalho, telefone_celular, ativo, motivo_inatividade_id', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'motivoInatividade' => array(self::BELONGS_TO, 'MotivoInatividade', 'motivo_inatividade_id'),
			'cidade' => array(self::BELONGS_TO, 'Cidade', 'cidade_id'),
			'estado' => array(self::BELONGS_TO, 'Estado', 'estado_id'),
			'pais' => array(self::BELONGS_TO, 'Pais', 'pais_id'),
			'profissao' => array(self::BELONGS_TO, 'Profissao', 'profissao_id'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'membro_id' => 'Membro',
			'nome' => 'Nome',
			'sobrenome' => 'Sobrenome',
			'data_nascimento' => 'Data de Nascimento',
			'data_conversao' => 'Data de Conversão',
			'data_batismo' => 'Data de Batismo',
			'rg' => 'RG',
			'rg_orgao' => 'Órgão expedidor do RG',
			'cpf' => 'CPF',
			'email' => 'E-mail',
			'sexo' => 'Sexo',
			'grau_instrucao' => 'Grau de Instrucão',
			'curso' => 'Curso',
			'nacionalidade' => 'Nacionalidade',
			'estado_civil' => 'Estado Civil',
			'profissao_id' => 'Profissão',
			'logradouro' => 'Logradouro',
			'numero' => 'Número',
			'complemento' => 'Complemento',
			'bairro' => 'Bairro',
			'cidade_id' => 'Cidade',
			'estado_id' => 'Estado',
			'cep' => 'Cep',
			'pais_id' => 'País',
			'telefone_residencial' => 'Telefone Residencial',
			'telefone_trabalho' => 'Telefone Trabalho',
			'telefone_celular' => 'Telefone Celular',
			'ativo' => 'Membro Ativo?',
			'motivo_inatividade_id' => 'Motivo da Inatividade',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('membro_id',$this->membro_id);
		$criteria->compare('nome',$this->nome,true);
		$criteria->compare('sobrenome',$this->sobrenome,true);
		$criteria->compare('data_nascimento',$this->data_nascimento,true);
		$criteria->compare('data_conversao',$this->data_conversao,true);
		$criteria->compare('data_batismo',$this->data_batismo,true);
		$criteria->compare('rg',$this->rg,true);
		$criteria->compare('rg_orgao',$this->rg_orgao,true);
		$criteria->compare('cpf',$this->cpf,true);
		$criteria->compare('email',$this->email,true);
		$criteria->compare('sexo',$this->sexo,true);
		$criteria->compare('grau_instrucao',$this->grau_instrucao,true);
		$criteria->compare('curso',$this->curso,true);
		$criteria->compare('nacionalidade',$this->nacionalidade,true);
		$criteria->compare('estado_civil',$this->estado_civil,true);
		$criteria->compare('profissao_id',$this->profissao_id);
		$criteria->compare('logradouro',$this->logradouro,true);
		$criteria->compare('numero',$this->numero,true);
		$criteria->compare('complemento',$this->complemento,true);
		$criteria->compare('bairro',$this->bairro,true);
		$criteria->compare('cidade_id',$this->cidade_id);
		$criteria->compare('estado_id',$this->estado_id);
		$criteria->compare('cep',$this->cep,true);
		$criteria->compare('pais_id',$this->pais_id);
		$criteria->compare('telefone_residencial',$this->telefone_residencial,true);
		$criteria->compare('telefone_trabalho',$this->telefone_trabalho,true);
		$criteria->compare('telefone_celular',$this->telefone_celular,true);
		$criteria->compare('ativo',$this->ativo);
		$criteria->compare('motivo_inatividade_id',$this->motivo_inatividade_id);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
}